package org.example.tree;

/**
 * 对称二叉树
 * 镜像对称
 */
public class Solution39 {
    public boolean isSymmetric(TreeNode root) {
        // 空树是对称的
        if (root == null) return true;

        return checkMirror(root.left, root.right);
    }

    private boolean checkMirror(TreeNode left, TreeNode right) {
        // 如果两个节点都为空，则对称
        if (left == null && right == null) return true;

        // 如果只有一个节点为空，或者两个节点的值不相等，则不对称
        if (left == null || right == null || left.val != right.val) return false;

        // 递归检查外侧和内侧是否对称
        return checkMirror(left.left, right.right) && checkMirror(left.right, right.left);
    }
}
